﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WebHelper.Controles
{
    /// <summary>
    /// Generalización de controles genéricos que implementan Phantom.
    /// </summary>
    public abstract class ControlGenerico : System.Web.UI.UserControl
    {
        private Type tipo;
        /// <summary>
        /// Entidad.
        /// </summary>
        public Type Tipo
        {
            get { return tipo; }
            set { tipo = value; }
        }

        string stringConnection;
        /// <summary>
        /// Conexión con la base de datos.
        /// </summary>
        protected string StringConnection
        {
            get { return stringConnection; }
            set { stringConnection = value; }
        }

        private SqlValor[] valores;
        /// <summary>
        /// Preestablece ciertos valores, que son de utilidad para las consultas.
        /// </summary>
        /// <example>
        /// -------------------
        /// Tabla: TipoAsiento
        /// -------------------
        /// Descripcion (Key)
        /// Habilitado
        /// CodEmpresa (Key)
        /// -------------------
        /// 
        /// Necesito trabajar sobre todos los tipos de asientos, para una determinada
        /// empresa.
        /// 
        /// Entonces, hago lo siguiente:
        /// 
        /// <code>
        /// this.ControlAbm1.Tipo = typeof(Siscont.Contabilidad.TipoAsiento);
        /// // 2 es el tipo de empresa.
        /// this.ControlAbm1.Valores = new SqlValor[] { new SqlValor("CodEmpresa", 2) };
        /// this.ControlAbm1.OnShow();
        /// </code>
        /// </example>
        public SqlValor[] Valores
        {
            get { return valores; }
            set { valores = value; }
        }

        private SqlValor[] valoresRelacion;
        public SqlValor[] ValoresRelacion
        {
            get { return valoresRelacion; }
            set { valoresRelacion = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual void OnShow()
        {
            Storer st = new WebHelper.Storer(Tipo);

            if (StringConnection == null || StringConnection.Equals(""))
                StringConnection = CapaDatos.Datos.GetConnectionString(st.Esquema);

            st.Valores = Valores;
            st.ValoresCombo = ValoresRelacion;

            this.FantasmearControl(st);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="st"></param>
        public abstract void FantasmearControl(Storer st);
    }
}
